recent.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { useParams } from 'common'
  2. import { Clock } from 'lucide-react'
  3. import Link from 'next/link'
  4. import { Button } from 'ui'
  5. import RecentQueriesItem from '@/components/interfaces/Settings/Logs/RecentQueriesItem'
  6. import DefaultLayout from '@/components/layouts/DefaultLayout'
  7. import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout'
  8. import Table from '@/components/to-be-cleaned/Table'
  9. import LogsExplorerHeader from '@/components/ui/Logs/LogsExplorerHeader'
  10. import { useLocalStorage } from '@/hooks/misc/useLocalStorage'
  11. import type { LogSqlSnippets, NextPageWithLayout } from '@/types'
  12. export const LogsSavedPage: NextPageWithLayout = () => {
  13. const { ref } = useParams()
  14. const [recentLogSnippets, setRecentLogSnippets] = useLocalStorage<LogSqlSnippets.Content[]>(
  15. `project-content-${ref}-recent-log-sql`,
  16. []
  17. )
  18. const recent = recentLogSnippets.slice().reverse()
  19. return (
  20. <div className="mx-auto w-full px-5 py-6 h-full">
  21. <LogsExplorerHeader subtitle="Recent Queries" />
  22. {recent.length > 0 && (
  23. <Table
  24. head={
  25. <>
  26. <Table.th>Snippets</Table.th>
  27. <Table.th className="w-24">
  28. <Button size="tiny" type="default" onClick={() => setRecentLogSnippets([])}>
  29. Clear history
  30. </Button>
  31. </Table.th>
  32. </>
  33. }
  34. body={recent.map((item: LogSqlSnippets.Content) => (
  35. <RecentQueriesItem key={item.sql} item={item} />
  36. ))}
  37. />
  38. )}
  39. {recent.length === 0 && (
  40. <>
  41. <div className="my-auto flex h-full grow flex-col items-center justify-center gap-1">
  42. <Clock className="animate-bounce" />
  43. <h3 className="text-lg text-foreground">No Recent Queries Yet</h3>
  44. <p className="text-sm text-foreground-lighter">
  45. Your recent queries run from the{' '}
  46. <Link href={`/project/${ref}/logs/explorer`}>
  47. <span className="cursor-pointer font-bold underline">Query</span>
  48. </Link>{' '}
  49. tab will show here.
  50. </p>
  51. </div>
  52. </>
  53. )}
  54. </div>
  55. )
  56. }
  57. LogsSavedPage.getLayout = (page) => (
  58. <DefaultLayout>
  59. <LogsLayout title="Recent">{page}</LogsLayout>
  60. </DefaultLayout>
  61. )
  62. export default LogsSavedPage